/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package validadores.validadoresformato;

/**
 *
 * @author Steve
 */
public class StringValidador implements validadores.ValidadorFormato {

    private String sugerencia;
    private String mensajeError;
    private String mensajeErrorMin;
    private String mensajeErrorMax;
    private int min;
    private int max;
    private static final int NO_LIMIT = -1;

    /**
     * Constructor de la clase.<br>
     * Valida que el String tenga una longitud minimma
     * @param sugerencia mensaje de sugerencia
     * @param min cantidad de caracteres minimo
     * @param mensajeErrorMin mensaje de error en caso de no cumplir la
     * cantidad de caracteres minimo
     */
    public StringValidador(String sugerencia, int min, String mensajeErrorMin) {
        this(sugerencia, min,  mensajeErrorMin,NO_LIMIT, "");
    }

    /**
     * Constructor de la clase.<br>
     * Valida que el String tenga una longitud minima y no sobrepase
     * la longitud maxima
     * @param sugerencia mensaje de sugerencia
     * @param min cantidad de caracteres minimo
     * @param mensajeErrorMin mensaje de error en caso de no cumplir la
     * cantidad de caracteres minimo
     * @param max cantidad de caracteres maximo
     * @param mensajeErrorMax mensaje de error en caso de sobrepasar
     * el limite maximo
     */
    public StringValidador(String sugerencia, int min, String mensajeErrorMin, int max, String mensajeErrorMax) {
        this.sugerencia = sugerencia;
        this.mensajeErrorMin = mensajeErrorMin;
        this.mensajeErrorMax = mensajeErrorMax;
        this.min = min;
        this.max = max;
    }

    public void setSugerencia(String sugerencia) {
        this.sugerencia = sugerencia;
    }

    public String getSugerencia() {
        return sugerencia;
    }

    public void setMensajeError(String mensaje) {
        this.mensajeError = mensaje;
    }

    public String getMensajeError() {
        return mensajeError;
    }

    /**
     * Obtiene la longitud maxima que debe tener la cadena
     * @return
     */
    public int getMax() {
        return max;
    }

    /**
     * Establece la longitud maxima que debe tener la cadena
     * @param max
     */
    public void setMax(int max) {
        this.max = max;
    }

    /**
     * Obtiene la cantidad minima de caracteres que debe tener la cadena
     * @return
     */
    public int getMin() {
        return min;
    }

    /**
     * Establece la cantidad minima de caracteres que debe tener la cadena
     * @param min
     */
    public void setMin(int min) {
        this.min = min;
    }

    public boolean validar(String texto) {
        boolean ret = false;
        if (texto.length() < min) {
            //es menor que el limite minimo, no es valido
            setMensajeError(mensajeErrorMin);
            ret = false;
        } else { //cumple el limite minimo, verificar maximo
            if (max != NO_LIMIT) {
                //se ha definido el limite maximo
                if (texto.length() > max) {
                    //sobrepasa el limite maximo, no es valido
                    setMensajeError(mensajeErrorMax);
                    ret = false;
                } else {
                    //cumple limite maximo y minimo, es valido
                    ret = true;
                }
            } else {
                //no se definio el maximo, pero como cumple el minimo, es valido
                ret = true;
            }
        }
        return ret;
    }
}
